#include <led.h>

#define LED_RCC				(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD)
#define	LED_PORT_1			(GPIOA)
#define LED_PIN_1			(GPIO_Pin_8)

#define	LED_PORT_2			(GPIOD)
#define LED_PIN_2			(GPIO_Pin_2)

void LED_Initialize(void)
{
	// Initialize data structure.
	GPIO_InitTypeDef GPIO_InitStructure;
	// Loop for initialize each GPIO in array list.
	// Enable RCC.
	RCC_APB2PeriphClockCmd(LED_RCC, ENABLE);
	// Enable GPIO.
	GPIO_InitStructure.GPIO_Pin =	LED_PIN_1;
	GPIO_InitStructure.GPIO_Mode =	GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed =	GPIO_Speed_2MHz;
	GPIO_Init(LED_PORT_1, &GPIO_InitStructure);
	GPIO_SetBits(LED_PORT_1,LED_PIN_1);

    GPIO_InitStructure.GPIO_Pin =	LED_PIN_2;
    GPIO_Init(LED_PORT_2, &GPIO_InitStructure);
    GPIO_SetBits(LED_PORT_2,LED_PIN_2);
}

void LED1_On(void)
{
	// Set pin low.
	GPIO_ResetBits(LED_PORT_1, LED_PIN_1);
}

void LED1_Off(void)
{
	// Set pin high.
	GPIO_SetBits(LED_PORT_1, LED_PIN_1);
}

void LED1_Reverse(void)
{
	// Reverse pin state.
	if(1 == LED1_GetState())
	{
		LED1_On();
	}
	else
	{
		LED1_Off();
	}
}

uint8_t LED1_GetState(void)
{
	// Read pin state.
	return GPIO_ReadOutputDataBit(LED_PORT_1, LED_PIN_1);
}

void LED2_On(void)
{
    // Set pin low.
    GPIO_ResetBits(LED_PORT_2, LED_PIN_2);
}

void LED2_Off(void)
{
    // Set pin high.
    GPIO_SetBits(LED_PORT_2, LED_PIN_2);
}

void LED2_Reverse(void)
{
    // Reverse pin state.
    if(1 == LED2_GetState())
    {
        LED2_On();
    }
    else
    {
        LED2_Off();
    }
}

uint8_t LED2_GetState(void)
{
    // Read pin state.
    return GPIO_ReadOutputDataBit(LED_PORT_2, LED_PIN_2);
}